package com.zhaofan.other;

import org.junit.Test;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

//给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
//
// 给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。
//
//
//
//
//
// 示例 1：
//
//
//输入：digits = "23"
//输出：["ad","ae","af","bd","be","bf","cd","ce","cf"]
//
//
// 示例 2：
//
//
//输入：digits = ""
//输出：[]
//
//
// 示例 3：
//
//
//输入：digits = "2"
//输出：["a","b","c"]
//
//
//
//
// 提示：
//
//
// 0 <= digits.length <= 4
// digits[i] 是范围 ['2', '9'] 的一个数字。
//
// Related Topics 哈希表 字符串 回溯
public class No17 {


    @Test
    public void test(){
        String str="234";
        List<String> strings = letterCombinations(str);
        System.out.println(strings);
    }

    public List<String> letterCombinations(String digits) {
        char[][] map={{},{},{'a','b','c'},{'d','e','f'},{'g','h','i'},{'j','k','l'},{'m','n','o'},
                {'p','q','r','s'},{'t','u','v'},{'w','x','y','z'}};
        if(digits==null||digits.isEmpty()){
            return new ArrayList<>();
        }

        int[] dig=new int[digits.length()];
        for (int i = 0; i < digits.length(); i++) {
            dig[i]=Integer.valueOf(String.valueOf(digits.charAt(i)));
        }

        ArrayList<String> result = new ArrayList<>();
        for (int i = 0; i < map[dig[0]].length; i++) {
            result.add(String.valueOf(map[dig[0]][i]));
        }
        
        for (int i = 1; i < dig.length; i++) {
            int a=dig[i];
            ArrayList<String> temp = new ArrayList<>();
            for (int j = 0; j < map[a].length; j++) {
                char c = map[a][j];
                for (String str : result) {
                    temp.add(str+c);
                }
            }
            result=temp;
        }
        return result;
    }


}
